/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package jogopoo.Interface;


import java.util.ArrayList;
import javax.swing.JFrame;
import jogopoo.Engine.EngineKeyboard;
import jogopoo.Engine.EngineMusica;
import jogopoo.Grafico.GrafCenario;
import jogopoo.Util.Arquivo;

/**
 *
 * @author acer_5542
 */
/**
 * Cria a janela do jogo, contem o atributo do tipo GrafCeario que eh a fase
 * do jogo, e contem uma variavel do tipo EngineKeyboard que controla os
 * comandos de teclado.
 */
public class Janela extends JFrame {

    public Janela() throws InterruptedException {

        try{
        adicionaCenariosLista();
        }catch(Exception e){  e.printStackTrace();}
        musicStop = false;
        musica = new EngineMusica(this);
        musica.start();
        vida = 5;
        score = 0;
        MNuclear = 3;
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setResizable(false);
        cenario = new GrafCenario(this,lista_nomeCenarios.get(0),0);
        this.getContentPane().add(cenario);
        cenario.setSize(960,720);
        this.setSize(cenario.getWidth(),cenario.getHeight());
        EngineKeyboard k = new EngineKeyboard(cenario);
        this.addKeyListener(k);
        
    }
/**
 * metodo que muda a fase para a proxima
 * @param cenario1
 * @param cenario2
 */
    public void mudaFase(GrafCenario cenario1,GrafCenario cenario2){

        this.getContentPane().remove(cenario1);
        cenario1 = null;
        this.getContentPane().add(cenario2);
        cenario2.setSize(960,720);
        EngineKeyboard k = new EngineKeyboard(cenario2);
        this.addKeyListener(k);
    }
/**
 * adiciona o cenario na lista de cenarios conforme os arquivos de cenarios
 * @throws Exception
 */
   public void adicionaCenariosLista() throws Exception{
       int i = 0;

       while(Arquivo.verificaExistencia("cenarios/cenario"+i+".cnr") == true){
           lista_nomeCenarios.add("cenario"+i);
           System.out.println(lista_nomeCenarios.get(i));
           ++i;
       }
   }
/**
 * retorna a lista de nomes dos cenarios
 * @return lista_nomeCenarios
 */
   public ArrayList<String> getListaNomeCenarios(){
       return lista_nomeCenarios;
   }
/**
 * retorna a variavel Vida que é o total de vidas
 * @return vida
 */
   public int getVida(){
       return vida;
   }
/**
 * decrementa a variavel vida
 * @param cenario
 */
   public void decrementaVida(GrafCenario cenario){
       if(vida > 1)
       --vida;
       else{
           this.gameOver(cenario);
       }
   }
/**
 * incrementa a variavel Score
 * @param inrc
 */
   public void incrementaScore(int inrc){
       score += inrc;
   }
/**
 * retorna a variavel score
 * @return score
 */
   public int getScore(){
       return score;
   }
 /**
  * retorna o numero de ogivas nucleares
  * @return MNuclear
  */
   public int getMNuclear(){
       return MNuclear;
   }
 /**
  * retorna a flag musicStop que serve para parar a musica
  * @return MNuclear
  */
   public boolean getMusicStop(){
       return musicStop;
   }
 /**
  * incrmenta o numero de ogivas nucleares
  */
   public void incrementaMNuclear(){
       ++MNuclear;
   }
   /**
    * decrementa o numero de ogivas nucleares
    * @param x
    */
   public void decrementaMNuclear(int x){
       if(MNuclear > 0)
       --MNuclear;
   }
     private GrafCenario cenario;
     private ArrayList<String> lista_nomeCenarios = new ArrayList<String>();
     private int vida;
     private int MNuclear;
     private EngineMusica musica;
     private int score;
     private boolean musicStop;
/**
 * metodo reponsavel por o game over
 * @param cenario
 */
    public void gameOver(GrafCenario cenario){
        RankingIJ rk = new RankingIJ(score);
        this.musica.stop();
        rk.setVisible(true);
        cenario.setFim(true);
        this.getContentPane().remove(cenario);
        cenario = null;
        this.dispose();
    }
}
